import java.util.*;
import java.io.*;
//乒乓球筐
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String line;
        while ((line = reader.readLine()) != null) { // 读取多组输入
            String[] s = line.split(" ");
            HashMap<Character,Integer> bmap = new HashMap<>();
            for(char c : s[1].toCharArray()){
                bmap.put(c,bmap.getOrDefault(c,0)+1);
            }

            HashMap<Character,Integer> amap = new HashMap<>();
            for(char c : s[0].toCharArray()){
                amap.put(c,amap.getOrDefault(c,0)+1);
            }

            boolean found=true;
            for(int i=0;i<s[1].length();i++){
                if(!amap.containsKey(s[1].charAt(i))||bmap.get(s[1].charAt(i))>amap.get(s[0].charAt(i))){
                    found=false;
                    break;
                }
            }
            System.out.println(found?"Yes":"No");
        }
    }
}




//组队竞赛
class Main1 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] arr = new int[n * 3];

        for (int i = 0; i < n * 3; i++) {
            arr[i] = in.nextInt();
        }

        Arrays.sort(arr);

        long ans = 0;
        // 从倒数第 2 个开始，每隔 2 个取一次
        // 比如[1, 2, 3, 4, 5, 6, 7, 8, 9]
        // 取出的是8 6 4
        //可以组成: [1,4,6] , [2,6,7] , [3,8,9]
        for (int i = 3 * n - 2; i >= n; i -= 2) {
            ans += arr[i];
        }

        System.out.println(ans);
    }
}




//DP25 删除相邻数字的最大分数
 class Main2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] points = new int[10001]; // 记录每个数字的总得分
        int maxNum = 0; // 记录数组中的最大值

        // 统计每个数字的总贡献
        for (int i = 0; i < n; i++) {
            int num = in.nextInt();
            points[num] += num;
            maxNum = Math.max(maxNum, num);
        }

        // DP 数组
        int[] dp = new int[maxNum + 1];
        dp[0] = 0;
        dp[1] = points[1];

        // 动态规划求解
        //dp[i-1]：不选 i，保持之前的最大分数。
        //dp[i-2] + points[i]：选 i，则 i-1 不能选，取 dp[i-2] 加上 i 贡献的分数。
        for (int i = 2; i <= maxNum; i++) {
            dp[i] = Math.max(dp[i - 1], dp[i - 2] + points[i]);
        }

        // 输出最终答案
        System.out.println(dp[maxNum]);
    }
}
